/************************************************************************

								Heroes IV
					  Copyright 2000, The 3DO Company

	------------------------------------------------------------------
  						 get_artifact_damage_modifier.h

	$Header: /heroes4/get_artifact_damage_modifier.h $

	$NoKeywords: $

 ************************************************************************/
#if !defined( GET_ARTIFACT_DAMAGE_MODIFIER_H_INCLUDED )
#define GET_ARTIFACT_DAMAGE_MODIFIER_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <vector>
#include "artifact_effect_type.h"

class t_artifact;
enum  t_creature_ability;
class t_creature_stack;
class t_hero;
class t_material_array;
enum  t_skill_type;
enum  t_spell;
enum  t_terrain_type;

// check if hero has any artifact that gives an ability
bool artifact_gives_ability( t_hero const& hero, t_creature_ability ability );
// get total effect of all armor, as a percentage
int get_artifact_armor_value( t_hero const& hero, bool ranged );
// get amount added to creature attacks
int get_artifact_creature_attack_bonus( t_hero const& hero );
// get amount added to creature defense
int get_artifact_creature_defense_bonus( t_hero const& hero, bool ranged );
// get any and all additional damage done by artifacts
int get_artifact_damage( t_creature_stack const& creature, bool ranged );
// get any and all additional damage done by artifacts
// damage is an array [k_damage_type_count]
int get_artifact_damage( t_hero const& hero, bool ranged, std::vector<int>& damage );
// get total effect of all weapons on a hero's damage, as a percentage.
int get_artifact_damage_modifier( t_hero const& hero, bool ranged ); 
// get adventure map move bonus due to artifacts
int get_artifact_adventure_move_bonus( t_hero const& hero, bool sea_move );
// get bonus to hit points due to artifacts
int get_artifact_health_bonus( t_hero const& hero );
// get income due to artifacts
void get_artifact_income( t_hero const& hero, t_material_array& result );
// get artifact modifiers for luck
int get_artifact_luck( t_hero const& hero );
// get artifact magic resistance modifier
int get_artifact_magic_resistance( t_hero const& hero );
// get artifact modifiers for morale
int get_artifact_morale( t_hero const& hero );
// get discount due to penny-pinching
int get_artifact_recruitment_discount( t_hero const& hero );
// get scouting radius increase due to artifacts
int get_artifact_scouting_bonus( t_hero const& hero );
// get skill modifier
int get_artifact_skill_modifier( t_hero const& hero, t_skill_type skill );
// get speed bonus for artifacts
int get_artifact_speed_modifier( t_hero const& hero, 
							     t_artifact_target target = k_artifact_target_hero );
// get modifier of spell costs based on artifacts
int get_artifact_spell_cost( t_hero const& hero, t_spell spell );
// get increase in spell points due to artifacts
int get_artifact_spell_point_modifier( t_hero const& hero );
// get increase in recharge rate due to artifacts
int get_artifact_spell_point_recovery( t_hero const& hero );
// get modifier of spell power based on artifacts, which is a percentage
int get_artifact_spell_power_modifier( t_hero const& hero, t_spell spell );
// check if hero has a seaman's hat
bool has_seamans_hat( t_hero const& hero );
// check if hero has the Shackles of War
bool has_shackles_of_war( t_hero const& hero, t_artifact*& artifact );
// check if hero has a relevant terrain artifact
bool has_terrain_artifact( t_hero const& hero, t_terrain_type terrain );
// mark all spells known via artifact on hero
void set_artifact_spells( t_hero& hero );
// attempt to use a parchment
bool use_parchment( t_hero& hero, t_artifact const& artifact, std::string* message = 0);

#endif // GET_ARTIFACT_DAMAGE_MODIFIER_H_INCLUDED
